//
//  ZODCacheManager.h
//  ZTEOnlineDoc
//
//  Created by 万伟琦 on 2018/9/11.
//  Copyright © 2018年 ZTE. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

#define ZODSharedCacheManager [ZODCacheManager sharedInstance]

/**
 1. 文件 md5 作为文件夹名称
 2. 文件夹里面有个 index 文件，里面用 json 记录一些关于文件缓存的信息（文件 id，总页数，已缓存页数，）  例如：00010000004f3e7307270ef200001/head
 3. 每一页的文件名叫 1 。例如：00010000004f3e7307270ef200001/1
 */
@interface ZODCacheManager : NSObject


/**
 key: docMD5 | value: cacheInfo
 */
@property (nonatomic, strong) NSMutableDictionary *cacheInfos;
//@property (nonatomic, strong) NSCache *cacheInfos;


#pragma mark - Method

+ (instancetype)sharedInstance;


//获取文件的总页数
//- (NSString *)getNumberOfTotalPagesByDocID:(NSString *)docId;


//根据文件 id 和 page 获取缓存路径
//- (NSString *)getDocCachePathByDocID:(NSString *)docId page:(NSString *)page;


//根据文件 id 和 page 进行缓存
//- (BOOL)cacheDocWithDocID:(NSString *)docId page:(NSString *)page;


/**
 image 的 base64 长字符串分段缓存 (用户阅览完毕点击返回的时候，记得要把字典里面的缓存写到文件里，并把字典中的 KV 移除)

 @param docMD5          缓存文件的 MD5
 @param authRes         鉴权结果
 @param totalPages      当前缓存文件的总页数
 @param page            当前页
 @param base64Len       当前图片 base64 编码的总长度
 @param chunks          一共分了多少段
 @param chunk           当前是第几段
 @param chunkString     当前段的 base64 字符串
 */
- (void)cacheImageInMemoryWithDocID:(NSString *)docMD5
                            authRes:(NSString *)authRes
                         totalPages:(NSUInteger)totalPages
                           currPage:(NSInteger)page
                    imgBase64Length:(NSUInteger)base64Len
                             chunks:(NSUInteger)chunks
                          currChunk:(NSUInteger)chunk
                          chunkData:(NSString *)chunkString;


/**
 缓存鉴权结果。并写入 index 文件
 */

- (void)cacheAuthResult:(NSString *)authResult;


/**
 把 cacheInfos 的信息写入到磁盘文件中 (如果只是打开一个文件的话，理论上这里面只有一个键值对)
 */
//- (void)writeMemoryCacheIntoDisk;
- (void)writeMemoryCacheToDiskWithCompletion:(void (^)(void))completion;


/**
 用于提供给 JS 接口的 'localCache' 参数

 @param fileMD5  文件id
 @return  JSON
 */
- (NSString *)getLocalCachesJSONStringByFileMD5:(NSString *)fileMD5;


/**
 根据时间和预设最大缓存空间清理缓存，时间优先
 */
- (void)clearFileCachesByRule;

- (BOOL)clearAllCaches;


// FIXME: 有个缓存 14k 文件的问题还没解决

@end

NS_ASSUME_NONNULL_END
